package com.huang.factory;

public class AbstractFactory {

    /**
     * 产品大类--手机
     */
    interface Phone {
        void callUp();
    }

    /**
     * 小米实现了手机接口，生产小米手机
     * 其他品牌同样也可以实现手机接口来生产手机
     */
    class XiaomiPhone implements Phone {
        @Override
        public void callUp() {
            System.out.println("小米手机打电话");
        }
    }

    /**
     * 产品大类--路由器
     */
    interface Router {
        void openWiFi();
    }

    /**
     * 小米实现了路由器接口，生产小米路由器
     */
    class XiaomiRouter implements Router {
        @Override
        public void openWiFi() {
            System.out.println("小米路由器打开WiFi");
        }
    }
    ////////////////////////先定义的产品大类，再定义超级工厂

    /**
     * 抽象工厂
     */
    interface IAbstractFactory {
        Phone createPhone(String param);

        Router createRouter(String param);
    }

    /**
     * 具体的超级工厂
     */
    class SuperFactory implements IAbstractFactory {

        //可增加产品族，但是如果增加抽象工厂的方法的话，改动较大，
        // 不符合开闭原则
        @Override
        public Phone createPhone(String param) {
            return new XiaomiPhone();
        }

        @Override
        public Router createRouter(String param) {
            return new XiaomiRouter();
        }
    }

}
